iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
AI/ ML & Data

從0開始的影像辨識之路系列 第 27

Tensorflow-python:圖片分類-2-變形應用(Day 26)

  • 分享至 

  • xImage
  •  

Tensorflow-python:圖片分類 Sequential model:

Sequential model 是一種常用的深度學習模型結構,尤其在處理序列數據時表現優異。這種模型按順序構建層次結構,每一層的輸出直接作為下一層的輸入,這樣的特性使得它特別適合處理時間序列或文本數據。Sequential model 的典型應用包括語言模型、語音識別和時間序列預測等。


Tensorflow-python:圖片分類-2-變形應用 :
在原本的圖片分類中,只能將圖片分類到特定的指定類別中,而這次的變形應用主要想法是將相似度做一個分界然後做成可以擴充的圖片分類器。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
import pathlib
import glob
import matplotlib.pyplot as plt
import numpy as np
import os
import PIL
import time
import PIL.Image as Image
import joblib
import os
import cv2 as cv
os.environ['TF_XLA_FLAGS'] = '--tf_xla_enable_xla_devices'
data_dir = pathlib.Path("/content/drive/MyDrive/train_data")

i = 0
batch_size = 32
img_height = 180
img_width = 180

train_ds = tf.keras.utils.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  seed=3,
  image_size=(img_height, img_width),
  batch_size=batch_size)


val_ds = tf.keras.utils.image_dataset_from_directory(
  data_dir,
  validation_split=0.8,
  subset="validation",
  seed=3,
  image_size=(img_height, img_width),
  batch_size=batch_size)

class_names = train_ds.class_names
print(class_names)

os.chdir('/content/drive/MyDrive/') 


AUTOTUNE = tf.data.AUTOTUNE

num_classes =  len(class_names)

data_augmentation = keras.Sequential(
  [
    layers.RandomFlip("horizontal",
                      input_shape=(img_height,
                                  img_width,
                                  3)),
    layers.RandomRotation(0.1),
    layers.RandomZoom(0.1),
  ]
)

model = tf.keras.Sequential([
  data_augmentation,
  tf.keras.layers.Conv2D(64, 3, activation='relu',input_shape=(1,img_height, img_width, 3)),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Conv2D(32, 3, activation='relu'),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Conv2D(16, 3, activation='relu'),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Conv2D(8, 3, activation='relu'),
  tf.keras.layers.MaxPooling2D(),
  layers.Dropout(0.2),
  tf.keras.layers.Flatten(
      ),
  tf.keras.layers.Dense(8, activation='relu'),
  tf.keras.layers.Dense(num_classes+i)
])


model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

#model = joblib.load('../h5/model.h5')

history = model.fit(
train_ds,
validation_data=val_ds,
epochs=5
)

model.summary()
joblib.dump(model,'/content/drive/MyDrive/model/model_1.h5')

img = Image.open('/content/drive/MyDrive/test_data/2.jpg').convert('RGB')
img = img.resize((img_height, img_width))
img_array = tf.keras.utils.img_to_array(img)
img_array = tf.expand_dims(img_array, 0)
predictions = model.predict(img_array)
score = tf.nn.softmax(predictions[0])
print("This image most likely belongs to {} with a {:.2f} percent confidence.".format(class_names[np.argmax(score)], 100 * np.max(score)))
#os.rmdir('/content/drive/MyDrive/train_data/'+str(i))
while(1):
  if(100 * np.max(score) <70):
    os.mkdir('/content/drive/MyDrive/train_data/'+str(i))
    img.save('train_data/'+str(i)+'/'+str(i)+'.jpg')
    i = i+1
    model = tf.keras.Sequential([
    data_augmentation,
    tf.keras.layers.Conv2D(64, 3, activation='relu',input_shape=(1,img_height, img_width, 3)),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(32, 3, activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(16, 3, activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(8, 3, activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    layers.Dropout(0.2),
    tf.keras.layers.Flatten(
        ),
    tf.keras.layers.Dense(8, activation='relu'),
    tf.keras.layers.Dense(num_classes+i)
  ])


    model.compile(optimizer='adam',
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                  metrics=['accuracy'])

    #model = joblib.load('../h5/model.h5')

    history = model.fit(
    train_ds,
    validation_data=val_ds,
    epochs=15
    )
    model.summary()
    joblib.dump(model,'/content/drive/MyDrive/model/model_1.h5')
    img = Image.open('/content/drive/MyDrive/test_data/2.jpg').convert('RGB')
    img = img.resize((img_height, img_width))
    img_array = tf.keras.utils.img_to_array(img)
    img_array = tf.expand_dims(img_array, 0)
    predictions = model.predict(img_array)
    score = tf.nn.softmax(predictions[0])
    print("This image most likely belongs to {} with a {:.2f} percent confidence.".format(class_names[np.argmax(score)], 100 * np.max(score)))
  else:
    break

這篇文章主要提供一個想法,可能無法完全實現。


文章主題一覽:

  1. OpenCV-python:影像辨識基礎技能-1(Day 1)
  2. OpenCV-python:影像辨識基礎技能-2(Day 2)
  3. OpenCV-python:影像辨識的基礎臉部偵測-加碼更新(Day 2)

  1. Tensorflow-python:圖片分類-1-資料集準備(Day 3)
  2. Tensorflow-python:圖片分類-2-模型訓練(Day 4)
  3. Tensorflow-python:圖片分類-3-模型實際使用(Day 5)
  4. Tensorflow-python:圖片分類-4-完整程式總結(Day 6)

  1. Tensorflow-python:語意分割-1-資料集介紹(Day 7)
  2. Tensorflow-python:語意分割-2-模型訓練(Day 8)
  3. Tensorflow-python:語意分割-3-模型實際使用(Day 9)
  4. Tensorflow-python:語意分割-4-完整程式總結(Day 10)

  1. CycleGAN-python:生成相似圖片「由簡化繁」-1-資料集介紹(Day 11)
  2. CycleGAN-python:生成相似圖片「由簡化繁」-2-模型訓練(Day 12)
  3. CycleGAN-python:生成相似圖片「由簡化繁」-3-模型實際使用(Day 13)
  4. CycleGAN-python:生成相似圖片「由簡化繁」-4-完整程式總結(Day 14)
  5. CycleGAN-python:生成相似圖片「由繁化簡」-1-資料集介紹(Day 15)
  6. CycleGAN-python:生成相似圖片「由繁化簡」-2-模型訓練(Day 16)
  7. CycleGAN-python:生成相似圖片「由繁化簡」-3-模型實際使用(Day 17)
  8. CycleGAN-python:生成相似圖片「由繁化簡」-4-完整程式總結(Day 18)

  1. tensorflow-object-detection:物件辨識-3-模型實際使用(Day 19)
  2. tensorflow-object-detection:物件辨識-4-模型實際使用_應用篇(Day 20)

  1. MediaPipe:額外分享-1-手部追蹤(Day 21)
  2. MediaPipe:額外分享-2-人臉檢測(Day 22)
  3. MediaPipe:額外分享-3-物體檢測(Day 23)
  4. MediaPipe:額外分享-4-姿勢檢測(Day 24)

  1. Tensorflow-python:圖片分類-1-模型介紹(Day 25)
  2. Tensorflow-python:圖片分類-2-變形應用(Day 26)
  3. Tensorflow-python:語意分割-1-模型介紹(Day 27)
  4. Tensorflow-python:語意分割-2-變形應用(Day 28)
  5. CycleGAN-python:生成相似圖片-1-模型介紹(Day 29)
  6. CycleGAN-python:生成相似圖片-2-變形應用(Day 30)

粗體字為額外更新的文章。


上一篇
Tensorflow-python:圖片分類-1-模型介紹(Day 25)
下一篇
Tensorflow-python:語意分割-1-模型介紹(Day 27)
系列文
從0開始的影像辨識之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言